package com.ztesoft.book.common.utils.reflect;

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;

/**
 * author: mc
 * date: 2021-07-12
 */
@Slf4j
public abstract class ExportHandlerUtil {

    /**
     * 特殊字符数组
     */
    private static final Character[] SPEC_CHAR = {'+', '=', '-', '@'};

    /**
     * 如何是csv格式的则需要过滤特殊字符
     * 处理导出结果 如果string 开头包含 '+','=','-','@' 开头补充 ' 字符
     *
     * @param list 导出列表
     */
    public static void handleExportMethod(List<?> list) {

        try {

            for (Object obj : list) {
                Field[] fields = obj.getClass().getDeclaredFields();
                for (Field field : fields) {
                    String fieldName = field.getName();
                    Method method = obj.getClass().getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
                    if (field.getType().equals(String.class)) {
                        String invoke = (String) method.invoke(obj);
                        if (StringUtils.hasLength(invoke)) {
                            if (Arrays.asList(SPEC_CHAR).contains(invoke.charAt(0))) {
                                field.setAccessible(true);
                                field.set(obj, "'" + invoke);
                            }
                        }
                    }
                }
            }
        }
        catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
            log.error("handleExportCSVException", e);
        }

    }
}
